#ifndef _DEF_H_
#define _DEF_H_

#include <stdlib.h>
#include <stdio.h>

/*
    代码编译四个阶段:
        预处理阶段
            替换头文件
            替换宏定义
        汇编阶段
            把 C/C++ 翻译成 汇编代码
        编译阶段
            把汇编代码编译为二进制形式
        链接阶段
            xxxx.dll
            xxxx.so
            形成可执行文件
*/

// 复杂宏
#define ERR_EXIT(m) \
    do              \
    {               \
        perror(m);  \
        exit(EXIT_FAILURE);\
    } while(0)


// 简单宏
#define MAXLINE 1024      // 每行输入的最大长度 --> 命令的最大长度
#define MAXARG  20        // 每个命令最多 20 个参数
#define PIPELINE 5        // 管道中简单命令的个数
#define MAXNAME 100       // 重定向文件名的长度

// 命令结构体
typedef struct command {
    char* args[MAXARG + 1];   // 指针数组，数组中的指针，指向解析出来的命令参数
    int infd;    // 输入文件描述符
    int outfd;   // 输出文件描述符
}COMMAND;

#endif //MINISHELL_DEF_H
